package CloudStorageServlets;

import CloudStorage.*;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class LoginServlet extends HttpServlet
{    
    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException, IOException
    {
        HttpSession session = request.getSession();
        Database database = new Database();

        User user = database.getUser( (String) request.getParameter("username"));

        if ( user == null )
        {
            session.setAttribute("message", "wrong username");
            response.sendRedirect("login.jsp");
        }
        else if(((String) request.getParameter("password")).equals(user.getPassword()) == false)
        {
            session.setAttribute("message", "wrong password");
            response.sendRedirect("login.jsp");
        }
        else
        {                                   //10 bytes -> 10 mb
            if ( user.getAvailableSpace() < 10 * 1024 * 1024 )
            {
                session.setAttribute("alert", "");

/*          Mail notification 
            String from="cloudstore@di.uoa.gr";
            String to=user.getEmail();
            SmtpClient client = new SmtpClient("mailhost@di.uoa.gr");
            client.from(from);
            client.to(to);
            PrintStream message = client.startMessage();
            message.println("To: " + to);
            message.println("Subject:  Available space alert from Cloud Storage");
            message.println("Dear " + user.getUsername() + " you currently have " + user.getAvailableSpace() + " Mb of Available Space. Please buy more.");
            message.println();
            message.println("From Cloud Storage Administration");
            message.println();
            client.closeServer();
*/

            }

            String lastLogin = user.getLastLogin();
            String today = Utility.getDate();
            
            if ( today.equals(lastLogin) == false )
            {
                int daysRegistered = Utility.getDaysRegistered(user);
                                                        // Mb -> bytes //
                database.giveSpace( user.getId(), daysRegistered * 1024 * 1024 );
                database.setLastLogin(user, today);
                user = database.getUser(user.getUsername());
            }

            session.setAttribute("user", user);
            Cart cart = database.getUserCart(user);
            session.setAttribute("cart", cart);

            session.setAttribute("status", "");
            response.sendRedirect("index.jsp");
        }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (SQLException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(LoginServlet.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}